Java8包含了全新的时间日期API,这些功能都放在了java.time
包下。这套全新的时间日期API是不可变且线程安全的(This class is immutable and thread-safe)。
1 本地时间:LocalDate、LocalTime、LocalDateTime
localDate
、LocalTime
、LocalDateTime
类的实例是不可变的对象,分别表示使用ISO-8601日历系统的日期、时间、日期和时间。它们提供了简单的日期或者时间,并不包含当前的时间信息。也不包含与时区相关的信息。
localDate
、LocalTime
、LocalDateTime
三个的使用的方式一模一样。
以localDateTime
为例:
1 | // 获取当前日期时间 |
输出结果:
2018-05-13T16:56:04.346
2017-11-22T15:23:55
2020-05-13T16:56:04.346
2016-05-13T16:56:04.346
2 时间戳:Instant
Instant
:时间戳,以1970年1月1日00:00:00 开始,到某个时间的毫秒值。
1 | // 默认获取UTC时区(UTC:世界统一时间) |
输出结果:
2018-05-13T11:54:33.717Z
1526212473717
2018-05-13T19:54:33.717+08:00
1970-01-01T00:01:00Z
3 计算间隔:Duration、Period
Duration
:计算两个“时间”之间的间隔。
Period
:计算两个“日期”之间的间隔。
计算两个“时间”之间的间隔。
1 | Instant instant1 = Instant.now(); |
计算两个“日期”之间的间隔。
1 | LocalDate date1 = LocalDate.of(2017, 1, 1); |
1
4
12相差1年4个月12天。
5 时间校正器:TemporalAdjuster
TemporalAdjuster
:时间校正器,有时我们可能会需要获取例如:将日期调整到“下个周如”等操作。
TemporalAdjusters
:该类通过静态方法提供了大量的常用TemporalAdjuster
的实现。
例如:
1 | LocalDateTime dateTime = LocalDateTime.now(); |
6 时间日期格式化:dateTimeFormatter
1 | // 使用ISO标准日期格式 |
7 时区的处理:ZonedDate、ZonedTime、ZonedDateTime
以
LocalDateTime
为例。
使用LocalDateTime
的static LocalDateTime now(ZoneId zone)
方法来指定时区:
1 | LocalDateTime dateTime = LocalDateTime.now(ZoneId.of("America/Los_Angeles")); |
结果:2018-05-13T06:24:47.349。显示的是美国洛杉矶时区的时间。
使用LocalDateTime
的ZonedDateTime atZone(ZoneId zone)
方法转换成ZonedDateTime
(带时区的时间日期对象):
1 | LocalDateTime dateTime2 = LocalDateTime.now(); |
结果:2018-05-13T06:24:47.446-07:00[America/Los_Angeles]
ZonedDateTime
是带时区的时间日期。